package com.fly.zuul;

import java.net.URI;

import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.core.Ordered;
import org.springframework.web.server.ServerWebExchange;

import reactor.core.publisher.Mono;

public class RequestTimeFilter implements GatewayFilter, Ordered {

	private static final String REQUEST_TIME_BEGIN = "requestTimeBegin";

	/**
	 * filterI(exchange,chain)方法，在该方法中，先记录了请求的开始时间，并保存在ServerWebExchange中，
	 * 此处是一个“pre”类型的过滤器，
	 * 然后再chain.filter的内部类中的run()方法中相当于"post"过滤器，
	 * 在此处打印了请求所消耗的时间。然后将该过滤器注册到router中
	 */
	@Override
	public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
		
		exchange.getAttributes().put(REQUEST_TIME_BEGIN, System.currentTimeMillis());
		return chain.filter(exchange)
//		.then(Mono.fromRunnable(() -> {
//			System.err.println("nihaoya");
//		}))
		;

	}

	/**
	 * Ordered中的int getOrder()方法是来给过滤器设定优先级别的，值越大则优先级越低。
	 */
	@Override
	public int getOrder() {
		return 0;
	}
}